7.5 数据结构与算法
数据结构 Java数据结构 List LinkedList, 链表实现 Vector, 数组实现, 读写安全, 通过synchronized实现 栈(Stack) Set LinkedHashSet HashSet,...
数据结构 Java数据结构 List LinkedList, 链表实现 Vector, 数组实现, 读写安全, 通过synchronized实现 栈(Stack) Set LinkedHashSet HashSet,...
7.6.1 字符串 无重复字符的最长子串 (给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。, 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子...
数据结构-Map Map HashMap Node<K,V>[] table, 使用数组存储 put(), 将key对应value放到map, 如果map包含对应key则把之前value替换 ...
数据结构-Queue 队列 BlockingQueue(接口, 阻塞队列) ArrayBlockingQueue Object[] items, 数组存储队列元素 a...
坐标型动态规划 状态: f(x)表示从起点走到坐标x, f[x][y]表示我从起点走到坐标x,y; 方程: 研究走到x, y这个点之前的一步; 初始化: 起点; 答案: 终点 Minimum Path Sum
初级排序算法 选择排序 找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置 插入排序 将每一元素插入到其他已经有序的...
高频基础算法题 合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素; ```java
Rabin Karp算法 将sourceStr转成int, 将targetStr转成int, 即通过hash算法把字符串转成int sourceStr的子串与targetStr的hashcode一致, 则校验子串内容是否一致, 若一致则找到符合的子串并返回, 因为是hash...
二分法模板 给定已排序的数组, 和target, 查找数组中任意一个/第一个/最后一个位置的target, 如果找不到则返回-1
View绘制流程与原理 绘制起点ViewRootImpl#performTraversals()
1.10.1 基础概念 * Image Stream Producers(图形流的生产者) 如OpenGL ES, Canvas 2D * Image Stream Consumers(图形流的消费者) SurfaceFilnger, 使用OpenGL和HW Composer组合surfaces * Window...
Native Debugger实现 sigaction()注册捕捉signal(SIGABRT[调用abort函数发的信号], SIGBUS[非法地址, 内存地址对齐出错], SIGFPE[算数错误], SIGILL[非法指令], SIGPIPE[管道破裂], SIGSEGV[访问未分配内存]) 通过s...
1.12.1 ANR场景 * Service Timeout, 20S无响应 * BroadcastQueue Timeout, 10S未执行完成 * InputDispatching Timeout, 输入5秒无响应
ContentProvider使用 ```java // 1. 继承ContentProvider public class XXXContentProvider extends ContentProvider { public Uri insert(Uri uri, ContentValues ...
1.14.1 Bitmap优化 Bitmap Config配置 配置inDensity和inTargetDensity inJustDecodeBounds预判Bitmap大小及使用inSampleSize压缩 2.3版本inNativeAlloc的使用
ListView 流程 核心概念, activeViews缓存当前激活(显示)的View, scrapViews缓存废弃(移除屏幕)的View 两次onLayout() 第一次: layoutChild() -> 由于getChi...
1.16.1 优先级 前台进程 进程持正在与用户交互的Activity。 startForeground() 进程持有一个BroadcastReceiver,这个BroadcastReceiver正在执行它的 onReceive() 方法 可...
Activity onCreate() onStart() onNewIntent(), 当startActivity()且Activity是singleTop, 或重新启动ActivityStack栈顶的Activity被调用… onResume() onPause() onStop(...
Handler源码分析
1.2.1 属性动画 ValueAnimator动画本质是帧刷新时, 提供相关刷新回调, 让业务可以调整View的属性 object(属性动画)必须要提供setXxx方法 TimeInterpolator(时间插值器), 根据时间的百分比来计算出当前属性值改变的百分比 TypeEvaluator...
初始化流程 Init.cpp 解析init.zygote.rc[parse_service] 启动main类型服务[do_class_start()] 启动zygote服务[service_start()] 创建Zygote进程[fork()] 创建Zygote Socket[creat...
启动流程 解析init.zygote.rc中的参数, 创建AppRuntime并调用AppRuntime#start方法 调用AndroidRuntime的startVM()方法创建虚拟机, 再调用startReg注册JNI函数 通过JNI方式调用ZygoteInit#main(), 第一次进入Ja...
启动流程 创建SystemServer进程 创建AMS, PMS, LS, DMS服务 创建PMKS, WMS, IMS, NMS, DBMS, FPS等服务 AMS, PMS, LS, DMS调用systemReady 启动systemUI, 剩余服务调用systemReady, 启动Wa...
1.6.1 Binder驱动 流程 init(), 创建/dev/binder设备节点, 调用binder_init(), 注册misc设备, 即调用misc_register() open()获取Binder Driver的文件描述符, binder_open(), 打开...
1.7.1 启动流程 startBootstrapService[SystemServer.java启动], (一)设置SystemServiceManager, (二)设置AMS的Installer, (三)初始化AMS相关的PMS, (四)设置SystemServer AMS创建, 创建Activi...
1.8.1 启动流程 1. `mSystemServiceManager#startService(Installer.class)` 启动`installer`服务 -> `PackageManagerService#main()`创建`PackageManager`服务并注册到ServiceManage...
1.9.1 启动流程 * WMS添加window的过程主要功能是添加Surface, 管理Surface布局以及Z轴排序问题 * `Systemserver`中`startOtherServices()` -> `WindowManagerService#main()`, 其中包含以下操作 * `W...
2.1.1 Java内存模型与内存管理 Young Memory Generation (年轻代) Eden S0 (幸存区, Eden满后通过Minor GC将对象移动到这) S1 (幸存区, Eden满后通过Minor GC将对象移动到这) ...
Serializable & Parcelable区别 Parcelable 效率高, 内存小, Binder的载体, 设计用于跨进程访问, 不能序列化到本地或者网络 Serializable 反射实现, 效率低, 消耗内存多, 保存到...
equals & hashcode hashcode用于HashMap等hash存储容器 hashMap会使用equals判断key是否相同, 因此需要根据规则复写hashcode equals 相同, hashcode一定相等, 基于这个点, equals复写, 一定要复写hashcode
2.2.1 锁 Java对象头和Monitor 对象在内存分为, 对象头、实例数据和对齐填充 对象头实现synchronized, 轻量锁和重量锁在Mark Word结构中定义 ObjectMonitor, wait状态的线程加入_WaitSet, 等待锁blo...
类文件结构 魔数(Magic), 存放魔数和版本信息, 保证Java虚拟机轻松分辨Java和非Java文件 Class文件的版本(Version), Java类文件的版本信息 常量池(Constant Pool), 存放字符串、类名、方法名、接口名称、final常量以及外部类的引用信息等常量。常量池...
2.4.1 Bootstrap ClassLoader 启动类加载器, C++实现, 将JAVA_HOME下的\lib中能被虚拟机识别的类库(比如rt.jar)加载到虚拟机内存中
2.7.1 类加载方案 原理:基于类加载器, DexClassLoader, 修改dexElements元素的位置实现热修复; 流程: 1. 获取当前应用的ClassLoader, 即BaseDexClassLoader, 2. 通过反射获取DexPathList属性对象PathList, 3. 通过P...
2.8.1基础用法 定义接口
2.9.1 异常捕获 Thread#setDefaultUncaughtExceptionHandler(), 类方法 Thread#setUncaughtExceptionHandler, 实例方法 备注: 未try, catch的异常, 即uncaught的情况下, UncaughtExcept...
如何分析ANR的trace
2.10.1 HashMap put() putVal() 无碰撞, 插入操作 碰撞 hash & key一致, 覆盖操作 p.next找...
2.13.1 SPI SerivceLoader#load() -> LazyIterator#hasNext() -> Classloader#getSystemResource查找META-INF/services/目录下的Java文件 -> ServiceLoader#par...
2.14.1 MVC & MVP & MVVM MVC Controller - 转发请求, 处理请求, 控制View & Model, Android上对应Activity, 处理数据、业务和UI View - 展示 & 交互, Andro...
2.15.1 观察者模式 Observable(被观察者) Observer(观察者) subscribe(订阅)、(事件) onComplete(), 事件队列结束 onNext()发事件, 需要触发onComplete() onError(), 事件队列异常
基础语法 定义函数
2.13.1 BlockCanary Looper#loop(), 主线程分发处理消息, 前后都会打印日志
2.13.1 IO Canary 流程图 找到Hook函数, 通过PLT Hook方案 (ELF Hook方案), hook掉posix的open、read、write、close函数
2.18.1 动态代理
2.13.1 AspectJ Join Points(程序中的关键函数或代码段) | Join Points | 说明 | | —————– | ——– | | method call | 函数调用, 调用的地方 | | method execution | 函数执行...
2.13.1 VirtualAPK 框架架构图(来自官网)
2.13.1 Drawable加载流程 Context#getResource().getDrawable(R.xxx.xxx) ComtextImpl#getResource - > ResourcesManager#getResource -> ResourcesMan...
2.22.1 ImageLoader 架构图(引用自Code KK)
2.23.1 架构图(引用自CodeKK)
2.22.1 okhttp使用 ```java OkHttpClient client = new OkHttpClient();
2.22.1 Glide
PLT Hook - Android Native Hook IO Canary使用的方案, 当动态链接的ELF程序里调用共享库的函数时, 第一次调用先到PLT表查找, PLT表中再跳到GOT表获得该函数的地址, 最终通过_dl_runtime_resolve获得函数的实际地址, PLT Hook通过直接修改GO...
待完善
待完善
2.29.1 gradle project, gradle待编译过程即project task, project包含一系列task, 如Java源码编译等 task的依赖关系, 定义task, 并指定assemble依赖于task xxx, 当assemble执行时, 就会先处理t...
第2章-Java内存区域与内存溢出异常
2.31.1 编译流程原理 MultiDexTransform(gradle中将multiDexEnabled设置为true, 则执行)
2.32.1 启动流程(注册监听) 创建ViewRootImpl
2.33.1 Camera详解 打开Camera
2.34.1 Java基础总结 String、StringBuffer、StringBuilder区别 String字符常量, 不可变的好处, 线程安全, 保证安全访问 StringBuffer、StringBuilder字符变量; StringBuffer优势在#appe...
待完成
第3章-对象的共享 3.1 可见性 只要有数据在多个线程之间共享, 就使用正确的同步 3.1.4 Volatile变量 volatile变量的典型用法, 检查某个状态标记以判断是否退出循环, vlatile boolean asleep; wh...
2.38.1 synchronized实现原理 实现原理 同步方法, 锁的是实例对象, 即对象锁, 方法表中的ACC_SYNCHRONIZED字段标识, 并使用该方法的对象在JVM内部对象表示的Klass作为锁对象 静态同步方法, 锁的是类对象, 即类锁, 方法表中的ACC...
2.39.1 启动加速 冷启动(App在设备刚启动或者应用被kill后首次启动即冷启动) 冷启动的开始, 系统会执行以下三个任务 加载启动App 启动后显示空白window 创建app的process ...
2.40.1 Linux线程优先级 Linux进程优先级 Linux进程优先级图 来源于杂谈Android线程优先级
2.41.1 wait() & notify()
对象通用方法 覆盖equals方法的类必须覆盖hashcode方法, 否则违反Object#hashCode的通用约定, 导致该类无法结合基于散列的集合正常运作
Android的匿名共享内存 Android可以使用Linux的一切IPC通信方式,包括共享内存,不过Android主要使用的方式是匿名共享内存Ashmem(Anonymous Shared Memory), MemoryFile是Android为匿名共享内存而封装的一个对象,这里通过使用MemoryFil...
引入泛型 类型安全 泛型主要目标是提高Java程序的类型安全 编译器可检查出因Java类型不正确导致的ClassCastException异常 符合越早出错代价越小原则 消除强制类型转换 直接得到目标类型, 消除许多强制...
反射与RRTI 反射, 即提供运行时获取类信息, 调用方法等能力, 提供动态化功能; 可用于hook, 动态代理, 依赖注入等技术 RRTI(Run-Time Type Identification)运行时类型识别, 作用是运行时识别一个对象的类型和类信息; 1). 传统的”RRTI”,它假定我们在编译...
方法调用 方法调用即确定调用方法的版本, 一切方法调用在Class文件存储都是符号引用; 而直接引用则是方法实际内存地址
启用ARCore 向manifest添加AR必备或AR可选条目 AR可选应用(包含可选AR功能)
自动内存管理 第2章 Java内存区域与内存溢出异常 2.2 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域 2.2.1 程序计数器 程序计数器(Program Counter Register)是当前线程所执行的字节码的行号指示器 ...
调试 addr2line, 定位异常堆栈代码行 获取异常堆栈中的汇编地址信息, 这里的目标地址是000a4f3c
跟我一起写 Makefile(一) makefile定义整个工程的编译规则, 好处是”自动化编译”, make则是解析makefile的命令工具 程序的编译和链接 把源文件(.c, .cpp)编译成中间代码文件(UNIX下为.o文件)的过程称为编译(compile); 将大量中间文...
生词表 chiefly adv. 主要地,首先 例句: he is remembered chiefly for his sonatas 同义词: above all(首先), mainly(主要)
生词 Gulf n. 海湾 Crisis n. 危机 例句: The Gulf Crisis (海湾危机) Negotiation n. 谈判, 交涉 confrontation n. 对抗, 对照, 对比 例句...
How to Increase Vocabulary Read, (such as New York Times) effect way is think of a similar word to replace Learn the pronunciation when l...
10.1 基础语法与使用 10.1.1 函数调用 调用对象的方法
参考 Swift 语言指南 Swift 专题页
基础原理 引用自JSPatch 实现原理详解 原文: JSPatch 能做到通过 JS 调用和改写 OC 方法最根本的原因是 Objective-C 是动态语言,OC 上所有方法的调用/类的生成都通过 Objective-C Runtime 在运行时进行,我们可以通过类名/方法名反射得到相应的类和方法 ...
EGL EGLDisplay: 系统显示ID或者句柄, 是对显示设备的抽象, 可以理解为前端显示窗口(Front Display) EGLContext: OpenGL ES图形图形上下文, 代表OpenGL状态机, OpenGL指令的执行环境 EGLSurface: 系统窗口或FrameBuff...
Vertex Shader Shader Program必须包含Vertex Shader和Fragment Shader, 其中Vertex Shader负责告诉GPU图像顶点的位置, Fragment Shader负责告诉GPU某个位置的颜色值 Vertex Shader
矩形绘制 VertexShader.glsl
流程图 图片来源于《视频直播技术详解》系列之一:开篇
EGL环境配置
EGL环境配置
1. 集成ARCore 参考ARCore开发指南, 包含依赖导入, 检测等相关逻辑
###
Create Session
7.2 select/poll/epoll select, int select(), 监控三类文件描述符, writefds, readfds, exceptfds, 调用select函数后阻塞, 直到描述符准备就绪或者超时, 函数返回 poll, int poll(), 与select类似, 没有描...
7.4.1 header 常用http头
7.5.1 位运算
7.6.1 内存寻址
7.7.1 IP网际协议
TCP头格式
mmap基础概念 mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系
HTTP 常用的HTTP方法有哪些? GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器 POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。 PUT: 传输文件,报文主体中包含文件内容,...
区别 内核态:cpu可以访问内存的所有数据,包括外围设备, 内核态运行内核代码 用户态:只能受限的访问内存,且不允许访问外围设备, 运行用户代码
共享内存的方式 mmap()系统调用 Posix共享内存 系统V共享内存
内存寻址方式的发展历程 直接寻址, 程序都是通过硬编码的形式绝对定位到内存地址。这种情况下的程序都有明显的缺点:可控性弱、难以重定位、难以维护等 分段, 段的地址存放在寄存器中, 把 1M 的空间分成数个 64K(16位寄存器可寻址)的段来管理, 8086 处理器为程序使用的代码段、数据段、堆栈段分别提...
VFS 虚拟文件系统(Virtual File System, VFS), 为用户程序提供文件和文件系统操作的统一接口,屏蔽不同文件系统的差异和操作细节
进程基础 进程是操作系统分配资源的基本单位, 也是程序执行过程的实体。程序是代码和数据的集合,本身是一个静态的概念,而进程是程序的一次执行的实体,是一个动态的概念 进程描述符(为了管理进程,内核需要对每个进程的属性和所需要做的事情,进行清楚的描述, 即task_struct) task_struct...
Android调用JS函数
基础语法 数据类型 Undefined Null Boolean String Number Object Symbol HTML DOM 修改HTML内容, docume...
selector(选择器) selector{property:value}, 例子:h1{color:red;font-size:14sp} 派生选择器, 根据元素在其位置的上下文样式定义样式…
语法基础 Hello Weex
Node.Js 基础模块 fs文件读写模块 读文件require('fs').readFile('sample.txt', 'utf-8', function (err, data){}); 写文件require('fs').w...
17.1 基础语法 声明式渲染
WebView性能优化 WebView耗时优化 WebView预加载, WebView池 IO异步化(资源、网络请求与WebView初始化加载分离) HTML页面耗时优化 静态直出, CDN直接输出可展示交互HTML(HTML不包含...
Webpack 模块化打包, 查找项目所有依赖文件, 并使用loader处理 通过npm start直接运行Webpack
Widget runApp函数接受Widget, 并使其成为Widget的根
参考 2018大厂高级前端面试题汇总
模块机制 遵循CommonJs的require, 模块上下文, exports Node.js核心模块 文件模块 三方模块 项目模块 模块寻径 当前文件目录的node_modules目录 若1没有符合的模块, 则...